粒度ロック granular lock
ロックの粒度は木構造をなしている
データベース全体(root)
データベース
テーブル
レコード
テーブルをロックすると暗黙の内にレコードもロックする
あるレコードをロックしているときにそのレコードを含むテーブルをロックすると競合する
それでは困るので新しいロックモードを導入する
MySQLの場合
lock table writeはtに対して排他ロック(X)
select ... for updateは行に対してX、テーブルに対してIX
インテントロックの役割は誰かがテーブル内の行をロックしていることを示すため
行ロックしてるときにより荒い粒度でロックされることを防ぐ
根(テーブル)から葉(レコード)へロックを取得する
ロックの解放は葉から根へ